package com.wx.smallchange;

import sun.plugin2.util.BrowserType;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 * ClassName:SmallChangeSys
 * Package :com.wx.smallchange
 * Description :
 *
 * @Author : coder_mu
 * @Create : 2023/5/26 - 15:57
 */
public class SmallChangeSys {
    public static void main(String[] args) {
        //先定义相关的属性
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);//用户输入
        int key;//定义一个key用来接收用户输入，然后进行switch case判断选择用户想要的操作
        //1.完成页面的粗略显示
        //2.完成零钱通明细
        String details = "-----------------零钱通明细-----------------" + "\n";
        //3.完成收益入账
        double money = 0;//入账金额
        double balance = 0;//余额
        Date date = null;//收益日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM--dd HH:mm");//日期格式化，不格式化的话会显示国际样式，不便于观察
        //4. 消费
        //定义新变量，保存消费的原因
        String note = "";

        do {//do while循环可以重复显示选择菜单
            System.out.println("========零钱通菜单========");
            System.out.println("1 零钱通明细");
            System.out.println("2 收益入账");
            System.out.println("3 消费");
            System.out.println("4 退出");
            System.out.println("请选择(1-4):");
            key = scanner.nextInt();//next()遇到空格/tab/回车结束,开头就出现空格/tab/回车不退出;nextline()遇到回车结束
            //使用switch分支控制语句
            switch (key) {
                case 1:
                    System.out.println(details);
                    break;
                case 2:
                    System.out.print("收益入账金额:");
                    money = scanner.nextDouble();
                    //校验入账金额是否符合常理，不能入账小于0
                    //采用过关斩将的思想，就是正确条件的反面来判断，设置一道道关卡
                    if (money <= 0) {
                        System.out.println("收益入账金额应该大于等于0");
                        break;
                    }
                    balance += money;//余额加上收益的金额
                    date = new Date();//获取当前时间
                    details += "收益金额 +" + money + "\t" + sdf.format(date) + "\t" + "余额:" + balance + "\n";//收益明细
                    break;
                case 3:
                    System.out.print("消费金额:");
                    money = scanner.nextDouble();
                    if (money <= 0 || money > balance) {
                        System.out.println("你的消费金额应该早0-" + balance + "元之间,不能超过这个范围");
                        break;
                    }
                    System.out.print("消费说明:");
                    note = scanner.next();
                    balance -= money;
                    //拼接消费信息到 details
                    date = new Date(); //获取当前日期
                    details += note + " -" + money + "\t" + sdf.format(date) + "\t" + "余额:" + balance + "\n";
                    break;
                case 4:
                    //输入4退出
                    System.out.print("你是否要退出(y/n):");
                    String choice = "";//定义一个变量接收用户输入的选择
                    while (true) {
                        //用户必须输入y/n,否则就一直循环
                        choice = scanner.next();
                        if ("y".equals(choice)) {
                            loop = false;//将loop赋值为false可以退出最外层的大循环
                            System.out.println("已退出零钱通");
                            break;//退出switch选择语句
                        } else if ("n".equals(choice)) {
                            break;//退出switch选择语句，进入主循环
                        }
                    }
                    break;
                default:
                    System.out.println("选择有误，请重新选择");
            }
        } while (loop);
    }
}